package ejemplogestorcadenas;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.8FF3B141-E21B-EEEC-2EBB-DFA0CD511053]
// </editor-fold> 
public class GestorCadenas extends Gestor implements Buscador
{

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.F2AE7F25-DF93-4D80-1373-4895986043C6]
    // </editor-fold> 
    private ArrayList<String> cadenas;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C4855DD0-5F1F-1F1C-93B9-6E6EFE056791]
    // </editor-fold> 
    public GestorCadenas()
    {
        cadenas = new ArrayList();
        cadenas.add("Esto es una Prueba");
        cadenas.add("Esto es son los valores por defecto");
        cadenas.add("buscando por el texto");
        cadenas.add("nueva linea de texto");
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7F9C66EB-6D2A-05CF-2397-4066D1E5EB6F]
    // </editor-fold> 
    public ArrayList<String> getCadenas()
    {
        return cadenas;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.71118D55-F4A0-590E-F864-303F4E5B888F]
    // </editor-fold> 
    public void setCadenas(ArrayList<String> val)
    {
        this.cadenas = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.29A8AD4F-F58A-ED01-1B78-8BFEBC4CCC19]
    // </editor-fold> 
    public void buscar()
    {
        //int posicion = 0;
        int contador = 0;
        boolean encontrado = false;
        String cadena = "";
        System.out.println("Introduzca el texto a buscar: ");
        Scanner lector = new Scanner(System.in);
        if (lector.hasNextLine())
        {
            cadena = lector.nextLine();
            while (contador < cadenas.size() && !encontrado)
            {
                String aux = cadenas.get(contador);
                if (aux.contains(cadena))
                {
                    // posicion = aux.indexOf(cadena);
                    System.out.println("Numero de line: " + contador);
                    System.out.println("Linea: " + aux);
                    encontrado = true;

                }
                contador++;
            }
        } else
        {
            System.out.println("carecteres introducidos erroneos");
        }


    }

    protected void SiguienteCoincidencia()
    {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    protected void cargarArchivo(String nombreFichero)
    {

        File fichero = new File(nombreFichero + ".txt");
        FileReader lectorFichero = null;
        Scanner lector = null;
        try
        {
            if (fichero.exists())
            {
                lectorFichero = new FileReader(fichero);
                lector = new Scanner(lectorFichero);
                int contador = 0;
                while (lector.hasNextLine())
                {
                    cadenas.set(contador, lector.nextLine());
                    contador++;
                }
                System.out.println("Fichero cargado");
            }
        } catch (FileNotFoundException ex)
        {
            Logger.getLogger(GestorCadenas.class.getName()).log(Level.SEVERE, null, ex);
        } finally
        {
            lector.close();
        }
    }

    protected void guardarArchivo(String nombreFichero)
    {
        File fichero = new File(nombreFichero + ".txt");
        FileWriter escritorFichero = null;
        PrintWriter escritor = null;
        try
        {
            if (!fichero.exists())
            {
                fichero.createNewFile();
            }
            escritorFichero = new FileWriter(fichero);
            escritor = new PrintWriter(escritorFichero);
            int contador = 0;
            while (contador < cadenas.size())
            {
                escritor.print(cadenas.get(contador) + "\r\n");
                contador++;
            }
            System.out.println("Fichero guardado");
        } catch (IOException ex)
        {
            Logger.getLogger(GestorCadenas.class.getName()).log(Level.SEVERE, null, ex);
        } finally
        {
            escritor.close();
        }

    }

    protected void mostrarArchivo()
    {
        int contador = 0;
        while (contador < cadenas.size())
        {
            System.out.println(cadenas.get(contador));
            contador++;
        }
    }

    protected void reemplazarTexto()
    {
        int posicion = 0;
        int contador = 0;
        boolean encontrado = false;
        String cadena = "";
        String cadenaReemplazo = "";
        Scanner lector = new Scanner(System.in);
        lector.useDelimiter("\n");
        System.out.println("Introduzca el texto a buscar: ");

        if (lector.hasNextLine())
        {
            cadena = lector.nextLine();
            while (contador < cadenas.size() && !encontrado)
            {
                String aux = cadenas.get(contador);
                if (aux.contains(cadena))
                {
                    posicion = aux.indexOf(cadena);
                    System.out.println("Numero de line: " + contador);
                    System.out.println("Linea: " + aux);
                    System.out.println("Introduzca el palabra de reemplazo: ");
                    cadenaReemplazo = lector.nextLine();
                    cadenas.set(contador, aux.replace(cadena, cadenaReemplazo));
                    System.out.println("Numero de line: " + contador);
                    System.out.println("Linea: " + cadenas.get(contador));

                    encontrado = true;
                }
                contador++;
            }
        } else
        {
            System.out.println("carecteres introducidos erroneos");
        }
    }
}

